import os
import sys

from dotenv import load_dotenv
from sqlalchemy import create_engine
from sqlalchemy.testing.config import db_url

sys.path.append(os.path.dirname(os.path.abspath(__file__)))

# ✅ 只在不是容器运行时才加载本地 .env
if os.getenv("DOCKER_ENV", "false").lower() != "true":
    from dotenv import load_dotenv

    load_dotenv('.env')


class Config:
    DOUBAO_MODEL_ID = os.environ.get('DOUBAO_MODEL_ID')
    DOUBAO_API_KEY = os.environ.get('DOUBAO_API_KEY')

    # 数据库配置 - 支持从环境变量读取
    SQLALCHEMY_DATABASE_URI = os.environ.get('SQLALCHEMY_DATABASE_URI')
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    # 使用SQLALCHEMY_ENGINE_OPTIONS提供额外的连接参数
    SQLALCHEMY_ENGINE_OPTIONS = {
        # 禁用SSL，使用直接密码认证
        "pool_pre_ping": True,
        "pool_recycle": 300
    }
    # SQLALCHEMY_ECHO = True

    # 文件上传配置
    UPLOAD_FOLDER = os.environ.get('UPLOAD_FOLDER', 'uploads')
    ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'}

    # 微信小程序配置
    MINIPROGRAM_APPID = os.environ.get('MINIPROGRAM_APPID')
    MINIPROGRAM_SECRET = os.environ.get('MINIPROGRAM_SECRET')

    # 微信支付配置
    MCH_ID = os.environ.get('MCH_ID')
    PAY_KEY = os.environ.get('PAY_KEY')
    WXPAY_NOTIFY_URL = os.environ.get('WXPAY_NOTIFY_URL')

    # JWT 配置
    JWT_SECRET_KEY = os.environ.get('JWT_SECRET_KEY', "'1231撒大苏打sd123125————0das'")  # 默认使用 SECRET_KEY
    JWT_ACCESS_TOKEN_EXPIRES = 24 * 60 * 60  # 24小时
    JWT_REFRESH_TOKEN_EXPIRES = 30 * 24 * 60 * 60  # 30天

    # 腾讯云COS配置
    COS_SECRET_ID = os.environ.get('COS_SECRET_ID')
    COS_SECRET_KEY = os.environ.get('COS_SECRET_KEY')
    COS_REGION = os.environ.get('COS_REGION')
    COS_BUCKET = os.environ.get('COS_BUCKET')

    # 百度OCR配置
    BAIDU_OCR_API_KEY = os.environ.get('BAIDU_OCR_API_KEY')
    BAIDU_OCR_SECRET_KEY = os.environ.get('BAIDU_OCR_SECRET_KEY')


class DevelopmentConfig(Config):
    DEBUG = True


class ProductionConfig(Config):
    DEBUG = False
    # 生产环境可以覆盖一些配置


# 根据环境变量选择配置
config = {
    'development': DevelopmentConfig,
    'production': ProductionConfig,
    'default': DevelopmentConfig
}

exConfig = Config()


